<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>getJSON方法手写</title>
</head>
<body>
<script>
    function getJSON(url) {
        // 返回 Promise 实例， Promise类里定义了then 的方法
        // const p = new Promise((resolve, reject) => {
        return new Promise((resolve, reject) => {
            // executor 执行器函数 同步
            // 将耗时的异步任务放在里面
            const xhr = new XMLHttpRequest();
            xhr.open('GET', url, true);
            xhr.send();
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    // 数据 xhr/fetch 数据交换的格式 json -->
                    const data = JSON.parse(xhr.responseText);
                    resolve(data);  // 成功
                    return;
                }
                xhr.onerror = function () {
                    reject(new Error('请求失败'));  // 失败
                }
            }
        });
    }

    // Promise 是es6提供的异步编程解决方案，优于回调函数
    // Promise 实例 then
    getJSON('https://api.github.com/users/shunwuyu')
    // promise
    // promise 实例 resolve 后运行
    .then((data) => {
        console.log(data);
    })
    // promise 实例 reject 后运行
    .catch(err => {
        console.log(err);
    })

</script>
</body>
</html>